;******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
;* File Name			: startup_stm32l1xx_md.s
;* Author			 : MCD Application Team
;* Version			: V1.3.0
;* Date				: 31-January-2014
;* Description		: STM32L1xx Ultra Low Power Medium-density Devices vector 
;*						table for MDK-ARM toolchain.
;*						This module performs:
;*						- Set the initial SP
;*						- Set the initial PC == Reset_Handler
;*						- Set the vector table entries with the exceptions ISR address
;*						- Branches to __main in the C library (which eventually
;*						calls main()).
;*						After Reset the CortexM3 processor is in Thread mode,
;*						priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>>	
;*******************************************************************************
; 
; Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
; You may not use this file except in compliance with the License.
; You may obtain a copy of the License at:
; 
;		http://www.st.com/software_license_agreement_liberty_v2
; 
; Unless required by applicable law or agreed to in writing, software 
; distributed under the License is distributed on an "AS IS" BASIS, 
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
; 
;*******************************************************************************

; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; <h> Stack Configuration
;	<o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size		EQU	 0x00000400

				AREA	STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem		SPACE	Stack_Size
__initial_sp


; <h> Heap Configuration
;	<o>	Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size		EQU	 0x00000200

				AREA	HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem		SPACE	Heap_Size
__heap_limit

				PRESERVE8
				THUMB


; Vector Table Mapped to Address 0 at Reset
				AREA	RESET, DATA, READONLY
				EXPORT	__Vectors
				EXPORT	__Vectors_End
				EXPORT	__Vectors_Size

__Vectors		DCD	 __initial_sp				; Top of Stack
				DCD	 Reset_Handler			 ; Reset Handler
				DCD	 NMI_Handler				; NMI Handler
				DCD	 HardFault_Handler		 ; Hard Fault Handler
				DCD	 MemManage_Handler		 ; MPU Fault Handler
				DCD	 BusFault_Handler			; Bus Fault Handler
				DCD	 UsageFault_Handler		; Usage Fault Handler
				DCD	 0						 ; Reserved
				DCD	 0						 ; Reserved
				DCD	 0						 ; Reserved
				DCD	 0						 ; Reserved
				DCD	 SVC_Handler				; SVCall Handler
				DCD	 DebugMon_Handler			; Debug Monitor Handler
				DCD	 0						 ; Reserved
				DCD	 PendSV_Handler			; PendSV Handler
				DCD	 SysTick_Handler			; SysTick Handler

				; External Interrupts
				DCD	 WWDG_IRQHandler			; Window Watchdog
				DCD	 PVD_IRQHandler			; PVD through EXTI Line detect
				DCD	 TAMPER_STAMP_IRQHandler	; Tamper and Time Stamp
				DCD	 RTC_WKUP_IRQHandler		; RTC Wakeup
				DCD	 FLASH_IRQHandler			; FLASH
				DCD	 RCC_IRQHandler			; RCC
				DCD	 EXTI0_IRQHandler			; EXTI Line 0
				DCD	 EXTI1_IRQHandler			; EXTI Line 1
				DCD	 EXTI2_IRQHandler			; EXTI Line 2
				DCD	 EXTI3_IRQHandler			; EXTI Line 3
				DCD	 EXTI4_IRQHandler			; EXTI Line 4
				DCD	 DMA1_Channel1_IRQHandler	; DMA1 Channel 1
				DCD	 DMA1_Channel2_IRQHandler	; DMA1 Channel 2
				DCD	 DMA1_Channel3_IRQHandler	; DMA1 Channel 3
				DCD	 DMA1_Channel4_IRQHandler	; DMA1 Channel 4
				DCD	 DMA1_Channel5_IRQHandler	; DMA1 Channel 5
				DCD	 DMA1_Channel6_IRQHandler	; DMA1 Channel 6
				DCD	 DMA1_Channel7_IRQHandler	; DMA1 Channel 7
				DCD	 ADC1_IRQHandler			; ADC1
				DCD	 USB_HP_IRQHandler		 ; USB High Priority
				DCD	 USB_LP_IRQHandler		 ; USB Low	Priority
				DCD	 DAC_IRQHandler			; DAC
				DCD	 COMP_IRQHandler			; COMP through EXTI Line
				DCD	 EXTI9_5_IRQHandler		; EXTI Line 9..5
				DCD	 LCD_IRQHandler			; LCD
				DCD	 TIM9_IRQHandler			; TIM9
				DCD	 TIM10_IRQHandler			; TIM10
				DCD	 TIM11_IRQHandler			; TIM11
				DCD	 TIM2_IRQHandler			; TIM2
				DCD	 TIM3_IRQHandler			; TIM3
				DCD	 TIM4_IRQHandler			; TIM4
				DCD	 I2C1_EV_IRQHandler		; I2C1 Event
				DCD	 I2C1_ER_IRQHandler		; I2C1 Error
				DCD	 I2C2_EV_IRQHandler		; I2C2 Event
				DCD	 I2C2_ER_IRQHandler		; I2C2 Error
				DCD	 SPI1_IRQHandler			; SPI1
				DCD	 SPI2_IRQHandler			; SPI2
				DCD	 USART1_IRQHandler		 ; USART1
				DCD	 USART2_IRQHandler		 ; USART2
				DCD	 USART3_IRQHandler		 ; USART3
				DCD	 EXTI15_10_IRQHandler		; EXTI Line 15..10
				DCD	 RTC_Alarm_IRQHandler		; RTC Alarm through EXTI Line
				DCD	 USB_FS_WKUP_IRQHandler	; USB FS Wakeup from suspend
				DCD	 TIM6_IRQHandler			; TIM6
				DCD	 TIM7_IRQHandler			; TIM7
__Vectors_End

__Vectors_Size	EQU	__Vectors_End - __Vectors

				AREA	|.text|, CODE, READONLY

; Reset handler routine
Reset_Handler	PROC
				 EXPORT	Reset_Handler			 [WEAK]
		IMPORT	__main
		IMPORT	SystemInit	
				 LDR	 R0, =SystemInit
				 BLX	 R0				
				 LDR	 R0, =__main
				 BX		R0
				 ENDP

; Dummy Exception Handlers (infinite loops which can be modified)

NMI_Handler	 PROC
				EXPORT	NMI_Handler				[WEAK]
				B		.
				ENDP
HardFault_Handler\
				PROC
				EXPORT	HardFault_Handler			[WEAK]
				B		.
				ENDP
MemManage_Handler\
				PROC
				EXPORT	MemManage_Handler			[WEAK]
				B		.
				ENDP
BusFault_Handler\
				PROC
				EXPORT	BusFault_Handler			[WEAK]
				B		.
				ENDP
UsageFault_Handler\
				PROC
				EXPORT	UsageFault_Handler		 [WEAK]
				B		.
				ENDP
SVC_Handler	 PROC
				EXPORT	SVC_Handler				[WEAK]
				B		.
				ENDP
DebugMon_Handler\
				PROC
				EXPORT	DebugMon_Handler			[WEAK]
				B		.
				ENDP
PendSV_Handler	PROC
				EXPORT	PendSV_Handler			 [WEAK]
				B		.
				ENDP
SysTick_Handler PROC
				EXPORT	SysTick_Handler			[WEAK]
				B		.
				ENDP

Default_Handler PROC

				EXPORT	WWDG_IRQHandler			[WEAK]
				EXPORT	PVD_IRQHandler			 [WEAK]
				EXPORT	TAMPER_STAMP_IRQHandler	[WEAK]
				EXPORT	RTC_WKUP_IRQHandler		[WEAK]
				EXPORT	FLASH_IRQHandler			[WEAK]
				EXPORT	RCC_IRQHandler			 [WEAK]
				EXPORT	EXTI0_IRQHandler			[WEAK]
				EXPORT	EXTI1_IRQHandler			[WEAK]
				EXPORT	EXTI2_IRQHandler			[WEAK]
				EXPORT	EXTI3_IRQHandler			[WEAK]
				EXPORT	EXTI4_IRQHandler			[WEAK]
				EXPORT	DMA1_Channel1_IRQHandler	[WEAK]
				EXPORT	DMA1_Channel2_IRQHandler	[WEAK]
				EXPORT	DMA1_Channel3_IRQHandler	[WEAK]
				EXPORT	DMA1_Channel4_IRQHandler	[WEAK]
				EXPORT	DMA1_Channel5_IRQHandler	[WEAK]
				EXPORT	DMA1_Channel6_IRQHandler	[WEAK]
				EXPORT	DMA1_Channel7_IRQHandler	[WEAK]
				EXPORT	ADC1_IRQHandler			[WEAK]
				EXPORT	USB_HP_IRQHandler			[WEAK]
				EXPORT	USB_LP_IRQHandler			[WEAK]
				EXPORT	DAC_IRQHandler			 [WEAK]
				EXPORT	COMP_IRQHandler			[WEAK]
				EXPORT	EXTI9_5_IRQHandler		 [WEAK]
				EXPORT	LCD_IRQHandler			 [WEAK]
				EXPORT	TIM9_IRQHandler			[WEAK]
				EXPORT	TIM10_IRQHandler			[WEAK]
				EXPORT	TIM11_IRQHandler			[WEAK]
				EXPORT	TIM2_IRQHandler			[WEAK]
				EXPORT	TIM3_IRQHandler			[WEAK]
				EXPORT	TIM4_IRQHandler			[WEAK]
				EXPORT	I2C1_EV_IRQHandler		 [WEAK]
				EXPORT	I2C1_ER_IRQHandler		 [WEAK]
				EXPORT	I2C2_EV_IRQHandler		 [WEAK]
				EXPORT	I2C2_ER_IRQHandler		 [WEAK]
				EXPORT	SPI1_IRQHandler			[WEAK]
				EXPORT	SPI2_IRQHandler			[WEAK]
				EXPORT	USART1_IRQHandler			[WEAK]
				EXPORT	USART2_IRQHandler			[WEAK]
				EXPORT	USART3_IRQHandler			[WEAK]
				EXPORT	EXTI15_10_IRQHandler		[WEAK]
				EXPORT	RTC_Alarm_IRQHandler		[WEAK]
				EXPORT	USB_FS_WKUP_IRQHandler	 [WEAK]
				EXPORT	TIM6_IRQHandler			[WEAK]
				EXPORT	TIM7_IRQHandler			[WEAK]

WWDG_IRQHandler
PVD_IRQHandler
TAMPER_STAMP_IRQHandler
RTC_WKUP_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler
ADC1_IRQHandler
USB_HP_IRQHandler
USB_LP_IRQHandler
DAC_IRQHandler
COMP_IRQHandler
EXTI9_5_IRQHandler
LCD_IRQHandler
TIM9_IRQHandler
TIM10_IRQHandler
TIM11_IRQHandler
TIM2_IRQHandler
TIM3_IRQHandler
TIM4_IRQHandler
I2C1_EV_IRQHandler
I2C1_ER_IRQHandler
I2C2_EV_IRQHandler
I2C2_ER_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
RTC_Alarm_IRQHandler
USB_FS_WKUP_IRQHandler
TIM6_IRQHandler
TIM7_IRQHandler

				B		.

				ENDP

				ALIGN

;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
				 IF		:DEF:__MICROLIB			
				
				 EXPORT	__initial_sp
				 EXPORT	__heap_base
				 EXPORT	__heap_limit
				
				 ELSE
				
				 IMPORT	__use_two_region_memory
				 EXPORT	__user_initial_stackheap
				 
__user_initial_stackheap

				 LDR	 R0, =	Heap_Mem
				 LDR	 R1, =(Stack_Mem + Stack_Size)
				 LDR	 R2, = (Heap_Mem +	Heap_Size)
				 LDR	 R3, = Stack_Mem
				 BX		LR

				 ALIGN

				 ENDIF

				 END

;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
